package com.cskaoyan.javase.oop2._1extends._7restriction;

import com.cskaoyan.javase.oop2._1extends._7restriction.test.A;

/**
 * 继承的限制:
 *      1.父类的私有成员可以不可以继承?
 *          可以继承,但是直接创建子类对象,没有权限直接访问
 *          可以通过一个父类的getter方法,来间接访问它
 *
 *           总结:子类继承父类成员,肯定是所有的都继承,但具体能不能访问,要看权限
 *              (因为父子类毕竟是两个类)
 *
 *     2.父类的静态成员能不能继承?
 *          子类确实可以用类名点使用父类静态成员,但这不是继承
 *          而是父子类共用了同一个父类的静态成员
 *          这不是继承,是共用
 *          所以:
 *          继承不考虑静态成员,静态成员也没有继承的概念,静态成员始终是属于类的,他不涉及继承.
 *
 *      3.构造器能不能继承?
 *          不能
 *          构造器的作用是new过程中用于给自身成员变量赋值,所以它被继承,毫无意义.
 *          构造器是不能继承的
 *
 *
 * @since 10:49
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        Son s = new Son();
        // 'num' has private access in 'com.cskaoyan.javase.oop2._1extends._7restriction.Father'
        // System.out.println(s.num);
        System.out.println(s.getNum());

        // new ASon().var
        System.out.println(new ASon().getVar());

        System.out.println("----------------------------");
        Father.method();
        Son.method();
        System.out.println(Father.staticNum);
        System.out.println(Son.staticNum);
        System.out.println("---------------------");
        Father.staticNum = 888;
        System.out.println(Son.staticNum);
        System.out.println("--------------------");
        Son.staticNum = 999;
        System.out.println(Father.staticNum);
    }
}
class Father{
    private int num = 777;
    static int staticNum = 666;

    public int getNum(){
        return num;
    }

    public static void method(){
        System.out.println("hello world!");
    }
}
class Son extends Father{}
class ASon extends A{}